import ListNode from "../common/list_node";
import {loopList} from '../common/list_node'
import {a1,b1} from '../common/list_node'

//思路，中间值不让链表断掉。分成处理完成和没处理完成的
function reverseList(head: ListNode | null): ListNode | null {
    let handled:ListNode | null = null
    let unHandled:ListNode | null = head

    while(unHandled != null) {
      let tmp = unHandled.next
      unHandled.next = handled
      handled = unHandled
      unHandled = tmp
    }
    return handled

};
//思路想象一下，head右边全是处理好的,堆栈保留了当前变量
function reverseList_recur(head: ListNode | null): ListNode | null {
  //终止条件
  if(head == null) {
    return head
  }
  if(head.next == null) {
    return head
  }

  //举例：7 6 5   1 2 3 4 ，最终要变成 1 2 3 4 5 6 7
  let reversedHead = reverseList_recur(head.next)// 1 2 3 4
  //走到这，head右边全是反转好的，
  //注意：当前head = 5，head.next=4(虽然反序了，但指针还是指向4)
  
  
  head.next.next = head //head.next.next 就是 4.next 要指向当前5，
  head.next = null//断开当前，7 6 1 2 3 4 5
  return reversedHead// 1 2 3 4 5
}
let handled = reverseList_recur(a1)
loopList(handled)

